package com.cn.sl.server.api.system.file.service

import com.cn.sl.server.api.system.file.model.dto.SysFileDto
import com.cn.sl.server.api.system.file.model.dto.UploadResultDto
import com.cn.sl.server.api.system.file.model.entity.SysFileEntity
import com.cn.sl.server.api.system.file.model.enumerate.FileType
import org.springframework.stereotype.Service
import org.springframework.web.multipart.MultipartFile
import java.io.FileOutputStream

/**
 * 系统文件
 *
 * @author 阮雪峰
 */
@Service
interface SysFileService {
    /**
     * 保存系统文件
     *
     * @param file 上传的文件
     * @param type 文件类型
     * @return SysFile
     */
    fun save(file: MultipartFile, type: FileType): SysFileDto

    /**
     * 删除
     *
     * @param entity entity
     */
    fun remove(entity: SysFileEntity)

    /**
     * 删除
     *
     * @param id id
     */
    fun remove(id: Long)

    /**
     * 删除全部
     *
     * @param entities entities
     */
    fun removeAll(entities: List<SysFileEntity>)

    /**
     * 根据id查询
     *
     * @param id id
     * @return SysFileEntity
     */
    fun findById(id: Long): SysFileDto
    fun findAllById(ids: List<Long>): List<SysFileDto>
    fun save(filename: String, type: FileType, write: (fileOutputStream: FileOutputStream) -> Unit): UploadResultDto
    fun deleteTemp()
    fun download(id: Long)
    fun downloadAll(ids: List<Long>)
    fun downloadTemplate(templateName: String)
}
